package com.idealighter.game.group.manager;

import com.google.inject.Inject;
import com.google.inject.Singleton;

import com.idealighter.game.gamerecord.dto.GameScoreInfoDto;
import com.idealighter.game.gamerecord.message.ResGroupScoreMsg;
import com.idealighter.game.group.convert.GroupConvert;
import com.idealighter.game.group.dto.ApplyInfoDto;
import com.idealighter.game.group.dto.GroupInfoDto;
import com.idealighter.game.group.dto.MemberInfoDto;
import com.idealighter.game.group.message.ResApplyListMsg;
import com.idealighter.game.group.message.ResBlackListMsg;
import com.idealighter.game.group.message.ResCreateGroupMsg;
import com.idealighter.game.group.message.ResFindMemberMsg;
import com.idealighter.game.group.message.ResGroupInfoMsg;
import com.idealighter.game.group.message.ResGroupMemberMsg;
import com.idealighter.game.group.message.ResMyGroupListMsg;
import com.idealighter.game.message.core.ResMessage;
import com.idealighter.game.player.manager.PlayerMgr;
import com.idealighter.game.player.service.bo.PlayerBo;
import com.idealighter.game.server.db.datadb.generate.domain.RoomCardGroupMemberApplyDomain;
import com.idealighter.game.server.db.datadb.generate.domain.RoomCardGroupMemberDomain;
import com.idealighter.game.server.db.datadb.mapper.domain.ScoreRangeDomain;
import com.idealighter.utils.check.EmptyUtil;

import java.util.ArrayList;
import java.util.List;

@Singleton
public class GroupMsgMgr {

  @Inject
  private PlayerMgr playerMgr;

  /**
   * 创建房间消息 .
   *
   * @author abin
   * @date 2018年5月23日 下午4:19:16
   * @param groupId 群id.
   * @return 消息.
   */
  public ResMessage resCreateGroup(int groupId) {
    ResCreateGroupMsg msg = new ResCreateGroupMsg();
    msg.setGroupId(groupId);
    return msg;
  }

  /**
   * 我的群 .
   *
   * @author abin
   * @date 2018年5月23日 下午4:19:37
   * @param dtos 群 列表.
   * @return 消息.
   */
  public ResMessage resMyGroup(List<GroupInfoDto> dtos) {
    ResMyGroupListMsg msg = new ResMyGroupListMsg();
    msg.setGroupList(dtos);
    return msg;
  }

  /**
   * 群详情.
   *
   * @author abin
   * @date 2018年5月23日 下午4:20:11
   * @param dto 群详情.
   * @param hasMsg 有消息.
   * @param role 角色.
   * @return 消息.
   */
  public ResMessage resGroupDetail(GroupInfoDto dto, boolean hasMsg, Byte role) {
    ResGroupInfoMsg msg = new ResGroupInfoMsg();
    msg.setGroupInfo(dto);
    msg.setHasMsg(hasMsg);
    msg.setRole(role != null ? (int) role : 0);
    return msg;
  }

  /**
   * 申请 列表.
   *
   * @author abin
   * @date 2018年5月23日 下午4:20:35
   * @param applyDomains 申请列表.
   * @return 消息.
   */
  public ResMessage resApplyList(List<RoomCardGroupMemberApplyDomain> applyDomains) {
    List<ApplyInfoDto> dtos = GroupConvert.INSTANCE.toApplyInfoDtos(applyDomains);

    ResApplyListMsg msg = new ResApplyListMsg();
    msg.setApplyList(dtos);

    return msg;
  }

  /**
   * 黑名单列表 .
   *
   * @author abin
   * @date 2018年5月23日 下午4:20:56
   * @param applyDomains 黑名单列表.
   * @return 消息.
   */
  public ResMessage resBlackList(List<RoomCardGroupMemberApplyDomain> applyDomains) {
    List<ApplyInfoDto> dtos = GroupConvert.INSTANCE.toApplyInfoDtos(applyDomains);

    ResBlackListMsg msg = new ResBlackListMsg();
    msg.setApplyList(dtos);

    return msg;
  }

  /**
   * 成员列表 .
   *
   * @author abin
   * @date 2018年5月23日 下午4:21:23
   * @param memberDomains 成员列表.
   * @return 消息.
   */
  public ResMessage resMemberList(List<RoomCardGroupMemberDomain> memberDomains) {
    List<MemberInfoDto> memberList = GroupConvert.INSTANCE.toMemberInfoDtos(memberDomains);

    ResGroupMemberMsg msg = new ResGroupMemberMsg();
    msg.setMemberList(memberList);

    return msg;
  }

  /**
   * 返回成员信息 .
   *
   * @author abin
   * @date 2018年5月24日 下午3:35:25
   * @param memberDomain 成员.
   * @return 消息.
   */
  public ResMessage resMemberDetail(RoomCardGroupMemberDomain memberDomain) {
    ResFindMemberMsg msg = new ResFindMemberMsg();
    MemberInfoDto dto = GroupConvert.INSTANCE.toMemberInfoDto(memberDomain);
    msg.setMember(dto);

    return msg;
  }

  /**
   * 获取牛友群战绩 .
   *
   * @author abin
   * @date 2018年5月25日 下午5:57:37
   * @param scoreRangeDomains 战绩列表.
   * @return 消息.
   */
  public ResMessage resGroupScore(List<ScoreRangeDomain> scoreRangeDomains) {
    List<GameScoreInfoDto> scoreInfoDtos = new ArrayList<>();
    if (EmptyUtil.listIsNotEmpty(scoreRangeDomains)) {
      for (ScoreRangeDomain scoreRangeDomain : scoreRangeDomains) {
        GameScoreInfoDto dto = new GameScoreInfoDto();

        PlayerBo playerBo = playerMgr.selectPlayer(scoreRangeDomain.getPlayerId());

        if (playerBo == null) {
          continue;
        }

        dto.setWin(scoreRangeDomain.getTotalWin());

        dto.setPlayerAvatar(playerBo.getPlayerAvatar());
        dto.setPlayerId(playerBo.getId());
        dto.setPlayerName(playerBo.getPlayerName());
        dto.setPlayerSuperId(playerBo.getSuperId());

        scoreInfoDtos.add(dto);

      }
    }
    ResGroupScoreMsg msg = new ResGroupScoreMsg();
    msg.setScoreList(scoreInfoDtos);

    return msg;

  }

}
